package com.cherry.system.mapper;

import com.cherry.common.core.domain.entity.SysMajor;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 专业管理 数据层
 *
 * @author 孙晨阳
 */
public interface SysMajorMapper {

    /**
     * 根据专业名称查询专业信息
     *
     * @param majorName 专业名称
     * @return 结果
     */
    SysMajor selectMajorByName(String majorName);

    /**
     * 查询专业管理数据
     *
     * @param major 专业信息
     * @return 专业信息集合
     */
    List<SysMajor> selectMajorList(SysMajor major);

    /**
     * 根据专业ID查询信息
     *
     * @param majorId 专业ID
     * @return 专业信息
     */
    SysMajor selectMajorById(Long majorId);

    /**
     * 根据ID查询所有子专业
     *
     * @param majorId 专业ID
     * @return 部门列表
     */
    List<SysMajor> selectChildrenMajorById(Long majorId);

    /**
     * 校验专业名称是否唯一
     *
     * @param majorName 专业名称
     * @param parentId  父专业ID
     * @return 结果
     */
    SysMajor checkMajorNameUnique(@Param("majorName") String majorName, @Param("parentId") Long parentId);

    /**
     * 新增专业信息
     *
     * @param major 专业信息
     * @return 结果
     */
    int insertMajor(SysMajor major);

    /**
     * 根据ID查询所有子专业（学院）（正常状态）
     *
     * @param majorId 专业（学院）ID
     * @return 结果
     */
    int selectNormalChildrenMajorById(Long majorId);

    /**
     * 修改子元素关系
     *
     * @param majors 子元素
     * @return 结果
     */
    int updateMajorChildren(@Param("majors") List<SysMajor> majors);

    /**
     * 修改学院正常状态
     *
     * @param majorIds 学院ID组
     */
    void updateMajorStatusNormal(Long[] majorIds);

    /**
     * 修改专业信息
     *
     * @param major 专业信息
     * @return 结果
     */
    int updateMajor(SysMajor major);

    /**
     * 查询下级专业或学院数量
     *
     * @param major 专业或学院信息
     * @return 结果
     */
    int selectMajorCount(SysMajor major);

    /**
     * 查询学院或专业是否存在用户
     *
     * @param majorId 学院或专业ID
     * @return 结果
     */
    int checkMajorExistUser(Long majorId);

    /**
     * 删除学院或专业
     *
     * @param majorId 学院或专业ID
     * @return 结果
     */
    int deleteMajorById(Long majorId);
}
